package com.lfd.rocketmq.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.exception.MQBrokerException;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.exception.RemotingException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * @项目名： spring-emq
 * @包名： com.lfd.rocketmq.service
 * @文件名: DelayProducerRockMQ
 * @创建者: liufudong@szyh-smart.com
 * @创建时间: 2024/10/1 13:17
 * @描述：
 */
@Slf4j
@Service
public class DelayProducerRockMQ {
    @Autowired
    private ObjectMapper objectMapper;

    /**
     * 延时级别	延时时间
     * 1	1 秒
     * 2	5 秒
     * 3	10 秒
     * 4	30 秒
     * 5	1 分钟
     * 6	2 分钟
     * 7	3 分钟
     * 8	4 分钟
     * 9	5 分钟
     * 10	6 分钟
     * 11	7 分钟
     * 12	8 分钟
     * 13	9 分钟
     * 14	10 分钟
     * 15	20 分钟
     * 16	30 分钟
     * 17	1 小时
     * 18	2 小时
     * @param namesrvAddr
     * @param topic
     * @param tag
     * @param msg
     * @throws MQClientException
     * @throws MQBrokerException
     * @throws RemotingException
     * @throws InterruptedException
     * @throws JsonProcessingException
     */
    public void send(String namesrvAddr, String topic, String tag, String msg) throws MQClientException, MQBrokerException, RemotingException, InterruptedException, JsonProcessingException {
        // 创建生产者并指定生产者组
        DefaultMQProducer defaultMQProducer = new DefaultMQProducer(topic);
        defaultMQProducer.setNamesrvAddr(namesrvAddr);
        defaultMQProducer.start();
        Message message = new Message(topic,tag ,msg.getBytes());
        // 给这个消息设定一个延迟等级
        // messageDelayLevel = "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
        message.setDelayTimeLevel(2);
        //发送单向消息
        defaultMQProducer.send(message);
        log.info("send发送时间:{}",new Date());

    }
}
